home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Struct.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  1KB  |  68 lines

  1. #include "stdafx.h"
  2.  
  3. cStructure *structures = 0, *structures_belowscreen = 0, *structures_abovescreen = 0;
  4.  
  5. cStructure::cStructure(int _x, int _y, cProperties *_orig, char *startseq)
  6.         : cGameObject(_orig)
  7. {
  8.     add_end((cList **)&structures);
  9.     
  10.     set_sequence(startseq, TRUE);
  11.     
  12.     set_position(_x, _y);
  13.  
  14.     inpenetrable = orig->params->get_bool("*INPENETRABLE", FALSE);    
  15. }
  16.  
  17. cStructure::~cStructure()
  18. {    
  19. }
  20.  
  21. int cStructure::control()
  22. {
  23.     cGameObject::control();
  24.  
  25.     return !explode && !below_screen();
  26. }
  27.  
  28. int cStructure::check_inpenetrable(cMovable *m, cDisplayable *d, cCircle *mc, cCircle *sc)
  29. {
  30.     cStructure *s = (cStructure *)d;
  31.     cGameObject *g = (cGameObject *)m;
  32.     fix x = g->fx, y = g->fy;
  33.     
  34.     // Check if structure is inpenetrable
  35.  
  36.     if (!s->inpenetrable || !g->influenced_by_inpenetrable)
  37.         return FALSE;
  38.  
  39.     // Check motion
  40.  
  41.     if (g->x == g->ox && g->y == g->oy)
  42.     {
  43.         if (g->x > s->x)
  44.             x += 5;
  45.         else
  46.             x -= 5;
  47.     }
  48.     else
  49.     {
  50.         if (g->x != g->ox)
  51.         {
  52.             x = g->ox;
  53.             g->vx = -g->vx / g->bounce_loss;
  54.         }
  55.  
  56.         if ((!g->fall_through_inpenetrable && g->y != g->oy) 
  57.             || (g->fall_through_inpenetrable && g->y > g->oy))
  58.         {
  59.             y = g->oy;
  60.             g->vy = 0;
  61.         }
  62.     }
  63.  
  64.     g->set_position(x, y);
  65.  
  66.     return TRUE;
  67. }
  68.